package cn.apienvrypt.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

/**
 * 时间转换
 *
 * @author admin
 */
@Component
public class DateConvertConfig implements Converter<String, Date> {

	/**
	 * 支持多种格式，可优化先处理约定好的格式
	 */
	public static Date convertDate(String source) throws ParseException {
		if(source == null || "".equals(source)) {
			return null;
		}
		try {
			return new Date(Long.parseLong(source));
		} catch(Exception e) {
			if(source.matches("^\\d{4}-\\d{1,2}$")) {
				return new SimpleDateFormat("yyyy-MM").parse(source);
			} else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) {
				return new SimpleDateFormat("yyyy-MM-dd").parse(source);
			} else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) {
				return new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(source);
			} else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) {
				return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(source);
			} else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}T\\d{1,2}:\\d{1,2}:\\d{1,2}\\.\\d{3}Z$")) {
				return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse(source);
			} else {
				throw new IllegalArgumentException("无效时间格式：" + source);
			}
		}
	}

	@Override
	public Date convert(String source) {
		Date date = null;
		try {
			date = convertDate(source);
		} catch(Exception e) {
			e.printStackTrace();
		}
		return date;
	}

}
